<template>
    <div>
        <el-input
            placeholder="输入关键字进行过滤"
            v-model="filterText">
        </el-input>
        <el-tree
            :data="menus"
            :props="defaultProps"
            node-key="catId"
            ref="menuTree"
            @node-click="nodeclick"
            :filter-node-method="filterNode"
            :highlight-current="true">
        </el-tree>
    </div>
</template>

<script>
//这里可以导入其他文件（比如：组件，工具js，第三方插件js，json文件，图片文件等等）
//例如：import 《组件名称》 from '《组件路径》';

export default {
    //import引入的组件需要注入到对象中才能使用
    components: {},
    props: {},
    data() {
        //这里存放数据
        return {
            filterText: "",
            menus: [],
            expandedKey: [],
            defaultProps: {
                children: "children",
                label: "name",
            },
        };
    },
    //计算属性 类似于data概念
    computed: {},
    //监控data中的数据变化
    watch: {
        filterText(val) {
            this.$refs.menuTree.filter(val);
        },
    },
    //方法集合
    methods: {
        //树节点过滤
        filterNode(value, data) {
            if (!value) return true;
            return data.name.indexOf(value) !== -1;
        },
        getMenus() {
            this.$http({
                url: this.$http.adornUrl("/product/category/list"),
                method: "get",
            }).then(({ data }) => {
                this.menus = data.data;
            });
        },
        nodeclick(data, node, component) {
            console.log("子组件category的节点被点击", data, node, component);
            //向父组件发送事件；
            this.$emit("tree-node-click", data, node, component);
        },
    },
    //生命周期 - 创建完成（可以访问当前this实例）
    created() {
        this.getMenus();
    },
    //生命周期 - 挂载完成（可以访问DOM元素）
    mounted() {},
    beforeCreate() {}, //生命周期 - 创建之前
    beforeMount() {}, //生命周期 - 挂载之前
    beforeUpdate() {}, //生命周期 - 更新之前
    updated() {}, //生命周期 - 更新之后
    beforeDestroy() {}, //生命周期 - 销毁之前
    destroyed() {}, //生命周期 - 销毁完成
    activated() {}, //如果页面有keep-alive缓存功能，这个函数会触发
};
</script>
<style scoped>
</style>